#pragma once

#include <memory>

#include "../Math/Vector.h"
#include "../Math/KernelFunction/KernelFunctionBase.h"

using namespace std;

class CKMeansNeuron
{
public:
	CKMeansNeuron() = delete;

	CKMeansNeuron(int inputDimension, double variance);

public:
	virtual double Execute(const Vector & inputPosition);

	virtual double Norm(const Vector & testPoint);

	virtual Vector GetMeansPosition();

	virtual void InsertMeansPosition(const Vector & centerPosition);

	virtual shared_ptr<IKernelFunctionBase> GetKernelFunctionObject();

	virtual void ResetKernelFunctionObject(const shared_ptr<IKernelFunctionBase> & kernelFunc);

protected:
	Vector m_CenterPosition;

	int m_NJ;

	shared_ptr<IKernelFunctionBase> m_KernelFunction;
};